<?php

require_once ("MateriasBDFacade.php");
require_once ("Materia.php");
require_once ("Perfil.php");
require_once ("Periodo.php");
require_once ("Departamento.php");
require_once ("Curso.php");

class MatProfPer_Collection {

    private $materiasObjArray = array();

    function __construct($user) {
        $fachadaBD = MateriasBDFacade::getInstance();
        if (!($fachadaBD->existePerfil($user))) {
            die("ERROR: MatProfPer_Collection: User instance doesn't exist.");
        }
        $array = $fachadaBD->obtenerMaterias($user);
        foreach ($array as $materiaRow) {
            $cursoObj = new Curso($materiaRow[0], $materiaRow[1], $materiaRow[2], $materiaRow[3], $materiaRow[4]);
            $this->materiasObjArray[] = $cursoObj;
        }
    }

    function obtenerMateriasArray() {
        $materiasStringArray = array();
        foreach ($this->materiasObjArray as $cursoObj) {
            $materiaObj = new Materia($cursoObj->getMateria());
            $departmentObj = new Departamento($materiaObj->getDepartamento());
            $profesorObj = NULL;
            $profesorNombre = NULL;
            $profesorApellido = NULL;
            if (!is_null($cursoObj->getProfesorID())) {
                $profesorObj = new Perfil($cursoObj->getProfesorID());
            }
            if (!is_null($cursoObj->getProfesorNombre())) {
                $profesorNombre = $cursoObj->getProfesorNombre();
            }
            if (!is_null($cursoObj->getProfesorApellido())) {
                $profesorApellido = $cursoObj->getProfesorApellido();
            }
            $tuplaStrings = array($materiaObj->getCodigo(), $materiaObj->getNombre(),
                $materiaObj->getNumCreditos(), $departmentObj->getNombre(),
                $cursoObj->getMesIni(), $cursoObj->getMesFin(),
                $cursoObj->getAnio(),
                isset($profesorObj) ? $profesorObj->getNombre() . " " . $profesorObj->getApellido() : $profesorNombre . " " . $profesorApellido,
                $cursoObj->getCalificacion());
            $materiasStringArray[] = $tuplaStrings;
        }
        return $materiasStringArray;
    }

    public function editarMateriaCursada($user, $codigo, $mesInicial, $mesFinal, $anio, $nombreProfesor, $apellidoProfesor, $calificacion) {
        $fachadaBD = MateriasBDFacade::getInstance();
        $usuarioProfesor = $fachadaBD->obtenerUsuario($nombreProfesor, $apellidoProfesor);

        if (!$usuarioProfesor) {
            $editado = $fachadaBD->actualizarMateriasProfesorSinPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $nombreProfesor, $apellidoProfesor, $calificacion);
        } else {
            $editado = $fachadaBD->actualizarMateriasProfesorConPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $usuarioProfesor, $calificacion);
        }

        if (!($editado)) {
            $confirmacion[] = "No se ha podido editar satisfactoriamente la materia '$codigo' para el período '$mesInicial' - '$mesFin' '$anio'";
        } else {
            $confirmacion[] = "Se ha editado satisfactoriamente la materia '$codigo' para el período '$mesInicial' - '$mesFinal' '$anio'";
        }

        return $confirmacion;
    }

    public function eliminarMateriaCursada($user, $codigo, $mesInicial, $mesFinal, $anio) {
        $fachadaBD = MateriasBDFacade::getInstance();

        $eliminado = $fachadaBD->eliminarMateria($user, $codigo, $mesInicial, $mesFinal, $anio);

        if (!($eliminado)) {
            $confirmacion[] = "No se ha podido eliminar satisfactoriamente la materia '$codigo' para el período '$mesInicial' - '$mesFin' '$anio'";
        } else {
            $confirmacion[] = "Se ha eliminado satisfactoriamente la materia '$codigo' para el período '$mesInicial' - '$mesFinal' '$anio'";
        }
        return $confirmacion;
    }

}

?>
